第 3 章:使用 Ansible 模組
Ansible Modules 模組種類
約有 12 種,從套件 (Packaging)、資料庫 (Database)、通知 (Notification)、雲端 (Cloud)、Windows 到網路 (Network) 等。要是找不到想要的功能,我們還可以透過 command
和 shell
等 Modules 自行擴充。
模組使用方法
- 進入 Ansible Documentation 網站
- 於左側點選 Module Index 的連結
- 於左側點選 Commands Modules 的連結
- 於內容頁點選 command 的連結
- 進到
command
module 文件後,可先跳過上述的簡介 - 將畫面移至捲至下方的範例 (Examples),先看看是不是我們要的功能
- 接著看選項表 (Options),它會列出必需使用的參數和各參數的預設值
- 最後記得瞄一下大綱 (Synopsis),這邊常常會提到些注意事項,例如要用 apt module 必需先滿足安裝
python-apt
或python3-apt
的套件才行
常用的 Ansible Module
apt
apt module 是給 Debian, Ubuntu 等作業系統 (OS) 使用的套件模組 (Packaging Modules),我們可以透過它管理 apt 套件。其類似的 Linux 指令有 apt
, apt-get
, aptitude
和 dpkg
更新套件索引 (快取),等同於 apt-get update 指令
- name: Update repositories cache
apt:
update_cache: yes
安裝 vim 套件
- name: Install the package "vim"
apt:
name: vim
state: present
移除 nano 套件
- name: Remove "nano" package
apt:
name: nano
state: absent
command
command module 是個可以在遠端上執行指令的指令模組 (Commands Modules),剛入門 Ansible 會用 module 不多?只要 Linux Shell 會通的指令都可以透過它使用。但它不支援變數 (variables) 和 <
, >
, |
, ;
和 &
等運算,若有這類需求請改用 shell module。
重新開機
- name: Reboot at now
command: /sbin/shutdown -r now
當某個檔案不存在時才執行該指令
- name: create .ssh directory
command: mkdir .ssh creates=.ssh/
先切換目錄再執行指令
- name: cat /etc/passwd
command: cat passwd
args:
chdir: /etc
copy
copy module 是從本地複製檔案到遠端的檔案模組 (Files Modules),若有使用變數需求者,可改用 template module,這部份凍仁會在第 14 章提到。其類似的 Linux 指令為 scp
。
複製 ssh public key 到遠端 (chmod 644 /target/file)
- name: copy ssh public key to remote node
copy:
src: files/id_rsa.pub
dest: /home/docker/.ssh/authorized_keys
owner: docker
group: docker
mode: 0644
複製 ssh public key 到遠端 (chmod u=rw,g=r,o=r /target/file)
- name: copy ssh public key to remote node
copy:
src: files/id_rsa.pub
dest: /home/docker/.ssh/authorized_keys
owner: docker
group: docker
mode: "u=rw,g=r,o=r"
複製 nginx vhost 設定檔到遠端,並備份原有的檔案
- name: copy nginx vhost and backup the original
copy:
src: files/ironman.conf
dest: /etc/nginx/sites-available/default
owner: root
group: root
mode: 0644
backup: yes
file
file module 是在遠端建立和刪除檔案 (file)、目錄 (directory)、軟連結 (symlinks) 的檔案模組 (Files Modules)。其類似的 Linux 指令為 chown
, chown
, ln
, mkdir
和 touch
。
建立檔案 touch,並設定檔案權限為 644
- name: touch a file, and set the permissions
file:
path: /etc/motd
state: touch
mode: "u=rw,g=r,o=r"
建立目錄 mkdir,並設定檔案擁有者為 docker
- name: create a directory, and set the permissions
file:
path: /home/docker/.ssh/
state: directory
owner: docker
mode: "700"
建立軟連結 ln
- name: create a symlink file
file:
src: /tmp
dest: /home/docker/tmp
state: link
lineinfile
lineinfile module 是個可用正規表示式對檔案進行插入或取代文字的檔案模組 (Files Modules)。其類似的 Linux 指令為 sed
。
移除 docker 使用者的 sudo 權限
- name: remove sudo permission of docker
lineinfile:
dest: /etc/sudoers
state: absent
regexp: '^docker'
在 /etc/hosts
檔案裡用 127.0.0.1 localhost
取代開頭為 127.0.0.1
的一行
- name: set localhost as 127.0.0.1
lineinfile:
dest: /etc/hosts
regexp: '^127\.0\.0\.1'
line: '127.0.0.1 localhost'
owner: root
group: root
mode: 0644
srvice
service module 是個用來管理遠端系統服務 的系統模組 (System Modules)。其類似的 Linux 指令為 service
。
啟用 nginx
- name: start nginx service
service:
name: nginx
state: started
停止 nginx
- name: stop nginx service
service:
name: nginx
state: stopped
重開網路服務
- name: restart network service
service:
name: network
state: restarted
args: eth0
shell
shell module 是可以在遠端用 /bin/sh
執行指令的指令模組 (Commands Modules),支援變數 (variables) 和 <
, >
, |
, ;
和 &
等運算。
藉由 ls 和 wc 檢查檔案數量
- name: check files number
shell: ls /home/docker/ | wc -l
把所有的 Python 行程給砍掉
- name: kill all python process
shell: kill -9 $(ps aux | grep python | awk '{ print $2 }')
stat
stat module 是用來檢查檔案狀態的檔案模組 (Files Modules)。其類似的 Linux 指令為 stat
。
檢查檔案是否存在,若不存在則建立它
- name: check the 'vimrc' target exists
stat:
path: /home/docker/.vimrc
register: stat_vimrc
- name: touch vimrc
file:
path: /home/docker/.vimrc
state: touch
mode: "u=rw,g=r,o=r"
when: stat_vimrc.stat.exists == false
取得某檔案的 md5sum
stat:
path: /path/to/something
checksum_algorithm: md5sum